home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / vidhrdw / bogeyman.c < prev    next >
C/C++ Source or Header  |  2000-04-04  |  4KB  |  171 lines

  1. #include "driver.h"
  2. #include "vidhrdw/generic.h"
  3.  
  4. static int flipscreen;
  5. unsigned char *bogeyman_videoram;
  6.  
  7.  
  8.  
  9.  
  10. void bogeyman_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom)
  11. {
  12.     int i;
  13.  
  14.     palette += 3*16;    /* first 16 colors are RAM */
  15.  
  16.     for (i = 0;i < 256;i++)
  17.     {
  18.         int bit0,bit1,bit2;
  19.  
  20.         /* red component */
  21.         bit0 = (color_prom[0] >> 0) & 0x01;
  22.         bit1 = (color_prom[0] >> 1) & 0x01;
  23.         bit2 = (color_prom[0] >> 2) & 0x01;
  24.         *(palette++) = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
  25.  
  26.         /* green component */
  27.         bit0 = (color_prom[0] >> 3) & 0x01;
  28.         bit1 = (color_prom[256] >> 0) & 0x01;
  29.         bit2 = (color_prom[256] >> 1) & 0x01;
  30.         *(palette++) = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
  31.  
  32.         /* blue component */
  33.         bit0 = 0;
  34.         bit1 = (color_prom[256] >> 2) & 0x01;
  35.         bit2 = (color_prom[256] >> 3) & 0x01;
  36.         *(palette++) = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
  37.  
  38.         color_prom++;
  39.     }
  40. }
  41.  
  42. int bogeyman_vh_start(void)
  43. {
  44.     dirtybuffer = malloc(videoram_size);
  45.     memset(dirtybuffer,1,videoram_size);
  46.     tmpbitmap = osd_create_bitmap(256,256);
  47.  
  48.     return 0;
  49. }
  50.  
  51. void bogeyman_vh_stop(void)
  52. {
  53.     free(dirtybuffer);
  54.     osd_free_bitmap(tmpbitmap);
  55. }
  56.  
  57. /******************************************************************************/
  58.  
  59. WRITE_HANDLER( bogeyman_paletteram_w )
  60. {
  61.     /* RGB output is inverted */
  62.     paletteram_BBGGGRRR_w(offset,~data);
  63. }
  64.  
  65. WRITE_HANDLER( bogeyman_videoram_w )
  66. {
  67.     bogeyman_videoram[offset]=data;
  68.     dirtybuffer[offset]=1;
  69. }
  70.  
  71. void bogeyman_vh_screenrefresh(struct osd_bitmap *bitmap, int full_refresh)
  72. {
  73.     int mx,my,offs,color,tile,bank,sx,sy,flipx,flipy,multi;
  74.  
  75.     if (palette_recalc())
  76.         memset(dirtybuffer,1,videoram_size);
  77.  
  78.     flipscreen=0; /* For now */
  79.  
  80.     for (offs = 0; offs<0x100; offs++)
  81.     {
  82.         if (dirtybuffer[offs] | dirtybuffer[offs+0x100])
  83.         {
  84.             dirtybuffer[offs] = dirtybuffer[offs+0x100] = 0;
  85.  
  86.             sx=offs%16;
  87.             sy=offs/16;
  88.  
  89.             bank=((bogeyman_videoram[offs+0x100] & 0x01) << 8) | bogeyman_videoram[offs];
  90.             bank=(bank/0x80)+3;
  91.             color=bogeyman_videoram[offs+0x100]>>1;
  92.  
  93.             drawgfx(tmpbitmap,Machine->gfx[bank],
  94.                     bogeyman_videoram[offs]&0x7f,
  95.                     color&7,
  96.                     flipscreen,flipscreen,
  97.                     16*sx,16*sy,
  98.                     0,TRANSPARENCY_NONE,0);
  99.         }
  100.     }
  101.  
  102.     copyscrollbitmap(bitmap,tmpbitmap,0,0,0,0,&Machine->drv->visible_area,TRANSPARENCY_NONE,0);
  103.  
  104.     /* Sprites */
  105.     for (offs = 0;offs < spriteram_size;offs += 4)
  106.     {
  107.         if (spriteram[offs] & 0x01)
  108.         {
  109.             sx = 240 - spriteram[offs+3];
  110.             sy = (240 - spriteram[offs+2]) & 0xff;
  111.             flipx = spriteram[offs] & 0x04;
  112.             flipy = 0;//spriteram[offs] & 0x02;
  113.             multi=spriteram[offs] & 0x10;
  114.             if (multi) sy-=16;
  115.  
  116.             if (1/*flipscreen*/)
  117.             {
  118.                 sx = 240 - sx;
  119.                 //sy = 240 - sy;
  120.                 flipx = !flipx;
  121.                 //flipy = !flipy;
  122.             }
  123.  
  124.             drawgfx(bitmap,Machine->gfx[2],
  125.                     spriteram[offs+1] + ((spriteram[offs] & 0x40) << 2),    // Modified by T.Nogi 1999/10/25
  126.                     (spriteram[offs] & 0x08) >> 3,    // Modified by T.Nogi 1999/10/26
  127.                     flipx,flipy,
  128.                     sx,sy,
  129.                     &Machine->drv->visible_area,TRANSPARENCY_PEN,0);
  130.             if (multi)
  131.                 drawgfx(bitmap,Machine->gfx[2],
  132.                     spriteram[offs+1]+ 1 + ((spriteram[offs] & 0x40) << 2),    // Modified by T.Nogi 1999/10/25
  133.                     (spriteram[offs] & 0x08) >> 3,    // Modified by T.Nogi 1999/10/26
  134.                     flipx,flipy,
  135.                     sx,sy+16,
  136.                     &Machine->drv->visible_area,TRANSPARENCY_PEN,0);
  137.         }
  138.     }
  139.  
  140.     /* Draw character tiles */
  141.     for (offs = 0;offs < 0x400; offs ++)
  142.     {
  143.         mx=offs%32;
  144.         my=offs/32;
  145.         if (flipscreen) {mx=31-mx; my=31-my;}
  146.         tile=videoram[offs] | ((videoram[offs+0x400]&3)<<8);
  147.         bank=tile/0x200;
  148.         if (!tile) continue;
  149. #if 0
  150.         color=0;//(videoram[offs+0x400]&2)>>1;    // Modified by T.Nogi 1999/10/26
  151. #else
  152.         color = 0;
  153.         if (!bank)
  154.         {
  155.             if ((tile >= 0x002) && (tile < 0x036)) color = 1;
  156.             if ((tile >= 0x10b) && (tile < 0x15b)) color = 1;
  157.             if ((tile >= 0x178) && (tile < 0x1c7)) color = 1;
  158.             if ((tile >= 0x1e0) && (tile < 0x1f3)) color = 1;
  159.         } else {
  160.             if ((tile >= (0x010+0x200)) && (tile < (0x17f+0x200))) color = 1;
  161.         }
  162. #endif
  163.         drawgfx(bitmap,Machine->gfx[bank],
  164.                 tile&0x1ff,
  165.                 color,
  166.                 flipscreen,flipscreen,
  167.                 8*mx,8*my,
  168.                 &Machine->drv->visible_area,TRANSPARENCY_PEN,0);
  169.     }
  170. }
  171.